package cn.swenty.backstage.framework.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**	
 * UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串, 总共36个字节长. 
 * GUID 是微软对UUID这个标准的实现.
 * UUID是由开放软件基金会（OSF）定义的. 
 * UUID还有其它各种实现, 不止GUID一种.
 * 
 *
 */
public abstract class IdGenerator {

	private static final Object lock = new Object();
	
	public static String getNextId() {
//		String uuid = null;
//		synchronized (lock) {
//			uuid = UUID.randomUUID().toString();
//		}
		
		String uuid = UUID.randomUUID().toString();
		StringBuilder sb = new StringBuilder();
		for (char c : uuid.toCharArray()) {
			if (c != '-') sb.append(Character.toUpperCase(c));
		}
		return sb.toString();
	}
	
	public static String getOrderNo(String userNo,String classNo) {
		classNo = classNo.equals("null")?"":classNo;
		userNo = userNo.equals("0") ? "":userNo;
		while(userNo.length()<=5){
			userNo = "0".concat(userNo);
		}
		while(classNo.length()<=3){
			classNo = "0".concat(classNo);
		}
		
		Date now = new Date();
		SimpleDateFormat outFormat = new SimpleDateFormat("MMddHHmmss");
		// 当前时间 yyyyMMddHHmmssSSS
		String currTime = outFormat.format(now);
		String strRandom = buildRandom(2) + "";
		// 10位序列号,可以自行调整。
		String strReq = currTime + strRandom;
		// 订单号，此处用时间加随机数生成，商户根据自己情况调整，只要保持全局唯一就行
		String out_trade_no = "YX"+userNo+strReq+classNo;
		return out_trade_no;
	}
	
	public static String getFzOrderNo(String agencyNo) {
		agencyNo = agencyNo.equals("null")?"":agencyNo;
		
		Date now = new Date();
		SimpleDateFormat outFormat = new SimpleDateFormat("MMddHHmmssSSS");
		// 当前时间 yyyyMMddHHmmssSSS
		String currTime = outFormat.format(now);
		String strRandom = buildRandom(2) + "";
		// 10位序列号,可以自行调整。
		String strReq = currTime + strRandom;
		// 订单号，此处用时间加随机数生成，商户根据自己情况调整，只要保持全局唯一就行
		String out_trade_no = "FZ"+agencyNo+strReq;
		return out_trade_no;
	}
	
	public static String getPaymentNo(String orderNo,String n) {
		String strRandom =getNextId().substring(28);
		// 流水号，订单号+01——99
		String out_trade_no = orderNo+n+strRandom;
		return out_trade_no;
	}
	
	/**
	 * 取出一个指定长度大小的随机正整数.
	 * 
	 * @param length
	 *            int 设定所取出随机数的长度。length小于11
	 * @return int 返回生成的随机数。
	 */
	public static int buildRandom(int length) {
		int num = 1;
		double random = Math.random();
		if (random < 0.1) {
			random = random + 0.1;
		}
		for (int i = 0; i < length; i++) {
			num = num * 10;
		}
		return (int) ((random * num));
	}
	
	public static void main(String[] args) {
//		String classNo ="999";
//		while(classNo.length()<=3){
//			classNo = "0".concat(classNo);
//		}
//		System.out.println(classNo);
		System.out.println(getNextId());
		// 当前时间 yyyyMMddHHmmss
//		String s ="02";
//		int j =01;
//		int n =j+01;
//		String m =String.valueOf(n);
//		System.out.println(m);
//		int i =Integer.valueOf(s);
//		System.out.println(i);
//		System.out.println(currTime);
//		for(int i=0;i<100;i++){
			
//			Date now = new Date();
//			SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
//			// 当前时间 yyyyMMddHHmmssSSS
//			String currTime = outFormat.format(now);
//			System.out.println(currTime);
			
//			String s =String.valueOf(Constants.baseNo+i);
//			System.out.println(s.substring(s.length()-2,s.length()));
//			System.out.println(IdGenerator.getNextId().substring(28));
//			String orderNo =IdGenerator.getOrderNo("60469", "131");
//		System.out.println(orderNo);
//		System.out.println(IdGenerator.getPaymentNo(orderNo,"01"));
//		}
		
		
	}

}
